#!/bin/bash

# Slackware build script for st

# Originally written by Nikolay Korotkiy <email removed>
# Now maintained by B. Watson <urchlay@slackware.uk>

# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.

# 20221228 bkw: updated for v0.9.

# 20211119 bkw: BUILD=2
# - new maintainer.
# - don't overwrite ncurses' st and st-256color terminfo entries.
#   thanks to Eric Lindblad for pointing this out.
# - install the rest of the docs (FAQ, LEGACY, TODO).
# - include config.h in the doc dir.
# - include patches.txt in the doc dir, if patches are used.
# - add .desktop and icon.

cd $(dirname $0) ; CWD=$(pwd)

PRGNAM=st
VERSION=${VERSION:-0.9}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i586 ;;
    arm*) ARCH=arm ;;
       *) ARCH=$( uname -m ) ;;
  esac
fi

if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
  echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
  exit 0
fi

TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

if [ "$ARCH" = "i586" ]; then
  SLKCFLAGS="-O2 -march=i586 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi

set -e

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
chown -R root:root .
find -L .  -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \
        \! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+

[ -e "$CWD/config.h" ] && cp -f $CWD/config.h config.h

# Now apply any other patches the user might have added. Have to
# do this *after* applying custom config.h, so any changes to
# config.h here won't get overwritten.
for i in $(ls $CWD/patches 2>/dev/null); do
  [ "$i" = "README" ] && continue
  echo "=== applying patch $i"
  patch -p1 < $CWD/patches/$i
  PATCHES+=" $i"
done

# 20200123 bkw: 'tic' stuff in Makefile doesn't respect DESTDIR.
sed -i "s|\\<tic\\>|& -o $PKG/usr/share/terminfo|" Makefile

# Above sed command got broken by upstream (they removed the @)
# so files were being written to the real /usr, not $PKG/usr.
# Doing it this way means the terminfo stuff is cleanly removed
# when the package is removed. tic won't create the dir, so:
mkdir -p $PKG/usr/share/terminfo

CFLAGS="$SLKCFLAGS" make && \
make install \
  PREFIX=/usr \
  MANPREFIX=/usr/man \
  DESTDIR=$PKG

strip $PKG/usr/bin/$PRGNAM
gzip -9 $PKG/usr/man/man?/*

# 20211119 bkw: some of st's terminfo defs have been included in
# Slackware's ncurses package. After some discussion with Thomas
# Dickey (the ncurses maintainer) I've decided the ncurses versions
# of these are better. Instead of hardcoding a list here, we'll
# actually use the ncurses package's file list to decide what to
# exclude.
pkgfile="$(
  ls /var/lib/pkgtools/packages/ncurses-* \
  | grep '/ncurses-[^-]\+-[^-]\+-[^-]\+$' \
)"

if [ -z "$pkgfile" ]; then
  echo "!!! can't find ncurses package, including all st terminfo entries"
  pkgfile=/dev/null
fi

for file in $PKG/usr/share/terminfo/s/*; do
  name="$( basename $file )"
  if grep -q '^usr/share/terminfo/s/'$name'$' $pkgfile
  then
    echo "=== excluding terminfo entry: $name"
    rm $file
  fi
done

# .desktop file adapted from xterm.desktop
mkdir -p $PKG/usr/share/applications
cat $CWD/$PRGNAM.desktop > $PKG/usr/share/applications/$PRGNAM.desktop

# Icons converted from https://en.wikipedia.org/wiki/File:Suckless_logo.svg
for px in 16 32 48 64 128; do
  size=${px}x${px}
  dir=$PKG/usr/share/icons/hicolor/$size/apps
  mkdir -p $dir
  convert -resize $size $CWD/$PRGNAM.png $dir/$PRGNAM.png
done

mkdir -p $PKG/usr/share/pixmaps
ln -s ../icons/hicolor/48x48/apps/$PRGNAM.png $PKG/usr/share/pixmaps/$PRGNAM.png

PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
mkdir -p $PKGDOC
cp -a config.h FAQ LEGACY LICENSE README TODO $PKGDOC
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild

if [ -n "$PATCHES" ]; then
  echo "This package was built with the following patch(es):" > $PKGDOC/patches.txt
  echo "$PATCHES" | sed 's, ,\n,g' >> $PKGDOC/patches.txt
fi

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
